﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Texfina.Core.Common;
using Texfina.Core.Web;
using Texfina.BOQry.Co;
using Texfina.Entity.Co;
using System.Collections;
using System.Drawing;
using System.Text;

namespace CO
{
    public partial class wfFactura : PageBase
    {

        Decimal mtIgv;
        Decimal mtDesc;
        //String mensaje;
        protected void Page_Load(object sender, EventArgs e)
        {
            //btnBuscarProv.ImageUrl = Constants2.ConstMenuControlValue.BUTTON_FIND;
            //btnBuscarEmitidoPor.ImageUrl = Constants2.ConstMenuControlValue.BUTTON_FIND;
            btnGrabar.ImageUrl = Constants2.ConstMenuControlValue.BUTTON_SAVENEW;
            btnSalir.ImageUrl = Constants2.ConstMenuControlValue.BUTTON_EXIT;

            if (!Page.IsPostBack)
            {
                DateTime fecha = DateTime.Now;
               
                ucControlFecha2.Text = fecha.ToString("d");

                
                LoadCombos();
                mObetenerDatosPrevios();
                mCargarDatos();

                mObetenerDatosPrevios2();
                mCargarDatos2();
            }
        }


        private void mObetenerDatosPrevios2()
        {
            //try
            //{
            //Session["htaOCFac"] = null;

            if (Session["htaidFactura"] != null)
            {
                Hashtable htaDatos = new Hashtable();
                htaDatos = (Hashtable)Session["htaidFactura"];
                hddIfac.Value = string.IsNullOrEmpty(htaDatos["Id_factura"].ToString()) ? string.Empty : htaDatos["Id_factura"].ToString();
                hidVentana.Value = string.IsNullOrEmpty(htaDatos["in_ventana"].ToString()) ? string.Empty : htaDatos["in_ventana"].ToString();
               
            }
            else
            {
                Session["htaidFactura"] = null;
                Hashtable HtaDatos = new Hashtable();
                Session["htaOFactNuevo"] = HtaDatos;

                HtaDatos = (Hashtable)Session["htaOFactNuevo"];
            }
        }
        private void mCargarDatos2()
        {
            try
            {
                if (!string.IsNullOrEmpty(hddIfac.Value))
                {
                    EFactura ofactura = new EFactura();

                    ofactura.Id_periodo = Session[ConstSessionVar.PERIODO].ToString(); //llenar con sesion
                    ofactura.Id_factura = string.IsNullOrEmpty(hddIfac.Value) ? string.Empty : Convert.ToString(hddIfac.Value);

                    ofactura.Id_empresa = Session[ConstSessionVar.EMPRESA].ToString();

                    EFactura oBtienefac = new EFactura();

                    oBtienefac = BFactura.mObtenerfac(ofactura);
                    txtIdDoc.Text = hddIfac.Value;
                    ucControlFecha1.Text = oBtienefac.Fe_factura.ToString().Trim();
                    txtIdDoc.Text = oBtienefac.Id_factura.ToString().Trim();
                    txtIdOC.Text = oBtienefac.Id_ordenco.ToString().Trim();
                    dpTipDoc.SelectedValue = oBtienefac.Id_docucom.ToString().Trim();
                    txtNumSerie.Text = oBtienefac.Id_serie.ToString().Trim();
                    txtNumDoc.Text = oBtienefac.Nu_docu.ToString().Trim();
                    HddIdprov.Value = oBtienefac.Id_clipro.ToString().Trim();
                    txtIdprov.Text = oBtienefac.ds_clipro.ToString().Trim();
                    HddIdEmitidopor.Value = oBtienefac.Id_personal.ToString().Trim();
                    lblEmitidoPor.Text = oBtienefac.ds_personal.ToString().Trim();
                    txtObseracion.Text = oBtienefac.Ds_observa.ToString().Trim();
                    dpModalidad.SelectedValue = oBtienefac.Id_modcomp.ToString().Trim();
                    dpNoneda.SelectedValue = oBtienefac.Id_vmoneda.ToString().Trim();

                    txtTipCambio.Text = oBtienefac.Mt_tc.ToString().Trim();
                    txtTotal_.Text = oBtienefac.Mt_total.ToString().Trim();
                    List<EDetProducto> lstoc = new List<EDetProducto>();

                    lstoc = BDetFactura.mListarFact(ofactura);

                    Session["_seslstListafac"] = lstoc;

                    GVDetalleProducto.DataSource = lstoc;

                    GVDetalleProducto.DataBind();

                    for (int r = 0; GVDetalleProducto.Rows.Count > r; r++)
                    {
                        var chk = ((CheckBox)GVDetalleProducto.Rows[r].FindControl("chkBxIGV")) as CheckBox;

                        var igv = (TextBox)GVDetalleProducto.Rows[r].FindControl("txtIGV");

                        if ((igv.Text == "0.0000") || (igv.Text=="0"))
                        {
                            chk.Checked = false;
                        }
                        else
                        {
                            chk.Checked = true;
                        }
                    }
                    getCalculo();
                }
            }
            catch (Exception ex)
            {
                ex.ToString();
            }
        }

        private void LoadCombos()
        {
            WebHelper.LoadListControl2(dpTipDoc, BDocumento.GetDocumento_Qry01(), "ds_docucom", "id_docucom");

            EProveedor prov = new EProveedor();
            prov.Id_empresa = Session[ConstSessionVar.EMPRESA].ToString();

            //WebHelper.LoadListControl2(dpProv, BProveedor.Proveedor_qry02(prov), "ds_raznombre", "id_clipro");

            WebHelper.LoadListControl2(dpNoneda, BTablaGeneral.TablaGeneralFill("016"), "ds_item", "id_item");
            WebHelper.LoadListControl2(dpModalidad, BTablaGeneral.TablaGeneralFill("127"), "ds_item", "id_item");
        }

        //protected void btnBuscarProv_Click(object sender, ImageClickEventArgs e)
        //{
        //    try
        //    {
        //        Session[Constants2.ConstSessionVar.SESION_PROV] = "_SESION_PROV_";
        //        ScriptManager.RegisterStartupScript(this, typeof(string), "OPEN_WINDOW", "var Mleft = (screen.width/2)-(760/2);var Mtop = (screen.height/2)-(700/2);window.open('wfProvFind.aspx', null, 'height=400,width=750,status=yes,toolbar=no,scrollbars=yes,menubar=no,location=no,top=\'+Mtop+\', left=\'+Mleft+\'' );", true);
        //    }
        //    catch (Exception ex)
        //    {
        //        ex.ToString();
        //    }
        //}

        protected void BuscarEmitidoPor_Click(object sender, ImageClickEventArgs e)
        {
            //try
            //{
            //    Session[Constants2.ConstSessionVar.SESION_EMITIDOPOR] = "_SESION_EMITIDOPOR";
            //    ScriptManager.RegisterStartupScript(this, typeof(string), "OPEN_WINDOW", "var Mleft = (screen.width/2)-(760/2);var Mtop = (screen.height/2)-(700/2);window.open('wfPersonalBnd.aspx', null, 'height=400,width=750,status=yes,toolbar=no,scrollbars=yes,menubar=no,location=no,top=\'+Mtop+\', left=\'+Mleft+\'' );", true);
            //}
            //catch (Exception ex)
            //{
            //    ex.ToString();
            //}


        }

        public override void RegisterGeneralScripts()
        {

            StringBuilder sb = new StringBuilder();

            sb.AppendLine("var varRet = modalDialog('wfPersonalX.aspx',750,400);");
            sb.AppendLine("if(varRet==null)");
            sb.AppendLine("return false;");
            sb.AppendLine("ctl = document.getElementById('" + this.HddIdEmitidopor.ClientID + "');");
            sb.AppendLine("ctl.value = varRet[1];");
            sb.AppendLine("ctl = document.getElementById('" + this.lblEmitidoPor.ClientID + "');");
            sb.AppendLine("ctl.value = varRet[2];");
            this.lblEmitidoPor.OnClientClick = sb.ToString();



            sb = new StringBuilder();



            ScriptManager.RegisterStartupScript(this, this.GetType(), "ScriptRegister", sb.ToString(), true);


        }

        public override void LoadInPostBack()
        {
            this.RegisterGeneralScripts();
        }


        private void mSalvarDatosGrilla()
        {
            try
            {
                //recorre la cantidad de items, por cada item la entidad oAsigHorario va almacenando , 
                //esto para que data que se va ingresando en la grilla no se pierda

                List<EDetProducto> lstSalvarDatos = new List<EDetProducto>();

                for (int i = 0; GVDetalleProducto.Rows.Count > i; i++)
                {
                    // la entidad almacena los items de la grilla 

                    EDetProducto oDetProducto = new EDetProducto();

                    // verificar si los valores ingresados en la grilla estan en label o texbox como tambien en un dropdowlinst

                    oDetProducto._Nu_Correla = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtNumCorrelativo")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtNumCorrelativo")).Text);
                    oDetProducto._Codigo = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIdproducto")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIdproducto")).Text);
                    oDetProducto.Id_vunicons = string.IsNullOrEmpty(((DropDownList)GVDetalleProducto.Rows[i].FindControl("dpUM")).SelectedValue) ? string.Empty : Convert.ToString(((DropDownList)GVDetalleProducto.Rows[i].FindControl("dpUM")).Text).ToString().Trim();
                    oDetProducto._Producto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDsProducto")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDsProducto")).Text);
                    oDetProducto._Cant = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtCantidad")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtCantidad")).Text);
                    oDetProducto._Peso_Bruto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPesoBruto")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPesoBruto")).Text);
                    oDetProducto._PreNeto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPneto")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPneto")).Text);
                    oDetProducto._PreUnit = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPU")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPU")).Text);
                    oDetProducto._igvActivo = ((CheckBox)GVDetalleProducto.Rows[i].FindControl("chkBxIGV")).Checked;
                    oDetProducto._Igv = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIGV")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIGV")).Text);
                    oDetProducto._subTotal = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtSubTotal")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtSubTotal")).Text);
                    oDetProducto._Dscto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDscto")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDscto")).Text);
                    oDetProducto._nu_pordscto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPorDesc")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPorDesc")).Text);
                    oDetProducto._detalle = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDetalle")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDetalle")).Text);

                    //añade los valores de la entidad a la lista de la entidad

                    lstSalvarDatos.Add(oDetProducto);

                }
                // se crea una sesion para almacenar la lista que contiene los  datos.

                Session["SeslstSalvaDatosFac"] = lstSalvarDatos;
            }

            catch (Exception ex)
            {

                ex.ToString();
            }
        }

        protected void getCalculo()
        {
            decimal deSuma = 0;
            decimal deTot;
            decimal detIgv;
            decimal detDesc;
            decimal total;

            deTot = 0;
            detDesc = 0;
            detIgv = 0;
            EDTipImpuesto dti = new EDTipImpuesto();
            DropDownList igv = new DropDownList();
            dti.IdPeriodo = Session[ConstSessionVar.PERIODO].ToString(); // LLENAR CON SESION
            WebHelper.LoadListControl2(igv, BDeTipImpuesto.GetListFill_Qry01(dti), "mtIgv", "mtIgv");
            for (int x = 0; GVDetalleProducto.Rows.Count > x; x++)
            {
                var stIgv = ((CheckBox)GVDetalleProducto.Rows[x].FindControl("chkBxIGV")) as CheckBox;
                TextBox txtCant = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtcantReg");
                TextBox txtPU = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtPU");
                TextBox txtigv = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtIGV");
                TextBox txtDesc = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtDscto");
                TextBox PorcDesc = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtPorDesc");
                TextBox _SubTotal = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtSubTotal");

                if (stIgv.Checked)
                {
                    if (Convert.ToDecimal(PorcDesc.Text) == 0)
                    {
                        deSuma = Convert.ToDecimal(txtCant.Text) * Convert.ToDecimal(txtPU.Text);
                        ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtSubTotal")).Text = deSuma.ToString();
                        mtIgv = Convert.ToDecimal(igv.SelectedItem.Text) * Convert.ToDecimal(_SubTotal.Text);
                        ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtIGV")).Text = mtIgv.ToString();
                        ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtDscto")).Text = "0.0000";
                    }
                    else
                    {
                        deSuma = Convert.ToDecimal(txtCant.Text) * Convert.ToDecimal(txtPU.Text);
                        ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtSubTotal")).Text = deSuma.ToString();
                        mtDesc = (Convert.ToDecimal(PorcDesc.Text) / 100) * Convert.ToDecimal(_SubTotal.Text);
                        ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtDscto")).Text = mtDesc.ToString();
                        mtIgv = (Convert.ToDecimal(_SubTotal.Text) - mtDesc) * Convert.ToDecimal(igv.SelectedItem.Text);
                        ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtIGV")).Text = mtIgv.ToString();
                    }

                }
                else
                {
                    deSuma = Convert.ToDecimal(txtCant.Text) * Convert.ToDecimal(txtPU.Text);
                    ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtSubTotal")).Text = deSuma.ToString();
                    ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtIGV")).Text = "0.0000";
                    mtDesc = (Convert.ToDecimal(PorcDesc.Text) / 100) * Convert.ToDecimal(_SubTotal.Text);
                    ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtDscto")).Text = mtDesc.ToString();

                }

                deTot = deTot + deSuma;
                detDesc = detDesc + Convert.ToDecimal(txtDesc.Text);
                detIgv = detIgv + Convert.ToDecimal(txtigv.Text);
                txtDescuento.Text = detDesc.ToString();
                txtIgv_.Text = detIgv.ToString();
                total = (deTot - detDesc) + detIgv;
                txtTotal_.Text = total.ToString();
            }
        }

        protected void mCalculaTotal()
        {
            decimal deSuma = 0;
            decimal deTot;
            decimal detIgv;
            decimal detDesc;
            decimal total;

            deTot = 0;
            detDesc = 0;
            detIgv = 0;
            EDTipImpuesto dti = new EDTipImpuesto();
            DropDownList igv = new DropDownList();
            dti.IdPeriodo = Session[ConstSessionVar.PERIODO].ToString(); // LLENAR CON SESION
            WebHelper.LoadListControl2(igv, BDeTipImpuesto.GetListFill_Qry01(dti), "mtIgv", "mtIgv");
            for (int x = 0; GVDetalleProducto.Rows.Count > x; x++)
            {
                var chk = ((CheckBox)GVDetalleProducto.Rows[x].FindControl("chkBxSelect")) as CheckBox;
                var stIgv = ((CheckBox)GVDetalleProducto.Rows[x].FindControl("chkBxIGV")) as CheckBox;
                TextBox txtCant = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtcantReg");
                TextBox txtPU = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtPU");
                TextBox txtigv = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtIGV");
                TextBox txtDesc = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtDscto");
                TextBox PorcDesc = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtPorDesc");
                TextBox _SubTotal = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtSubTotal");
                if (chk.Checked)
                {
                    if (stIgv.Checked)
                    {
                        if (Convert.ToDecimal(PorcDesc.Text) == 0)
                        {
                            deSuma = Convert.ToDecimal(txtCant.Text) * Convert.ToDecimal(txtPU.Text);
                            ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtSubTotal")).Text = deSuma.ToString();
                            mtIgv = Convert.ToDecimal(igv.SelectedItem.Text) * Convert.ToDecimal(_SubTotal.Text);
                            ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtIGV")).Text = mtIgv.ToString();
                            ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtDscto")).Text = "0.0000";
                        }
                        else
                        {
                            deSuma = Convert.ToDecimal(txtCant.Text) * Convert.ToDecimal(txtPU.Text);
                            ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtSubTotal")).Text = deSuma.ToString();
                            mtDesc = (Convert.ToDecimal(PorcDesc.Text) / 100) * Convert.ToDecimal(_SubTotal.Text);
                            ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtDscto")).Text = mtDesc.ToString();
                            mtIgv = (Convert.ToDecimal(_SubTotal.Text) - mtDesc) * Convert.ToDecimal(igv.SelectedItem.Text);
                            ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtIGV")).Text = mtIgv.ToString();
                        }
                    }
                    else
                    {
                        deSuma = Convert.ToDecimal(txtCant.Text) * Convert.ToDecimal(txtPU.Text);
                        ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtSubTotal")).Text = deSuma.ToString();
                        ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtIGV")).Text = "0.0000";
                        mtDesc = (Convert.ToDecimal(PorcDesc.Text) / 100) * Convert.ToDecimal(_SubTotal.Text);
                        ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtDscto")).Text = mtDesc.ToString();

                    }

                    deTot = deTot + deSuma;
                    detDesc = detDesc + Convert.ToDecimal(txtDesc.Text);
                    detIgv = detIgv + Convert.ToDecimal(txtigv.Text);
                    txtDescuento.Text = detDesc.ToString();
                    txtIgv_.Text = detIgv.ToString();
                    total = (deTot - detDesc) + detIgv;
                    txtTotal_.Text = total.ToString();
                }


            }
            ////decimal devalor = (deTot + deIgvtot);
            ////txtTotal.Text = string.Format("{0:0.000}", devalor);
        }


        private void mObetenerDatosPrevios()
        {
            //try
            //{
                //Session["htaidFactura"] = null;

                if (Session["htaOCFac"] != null)
                {
                    Hashtable htaDatos = new Hashtable();
                    htaDatos = (Hashtable)Session["htaOCFac"];
                    hddIdOC.Value = string.IsNullOrEmpty(htaDatos["Id_ordenco"].ToString()) ? string.Empty : htaDatos["Id_ordenco"].ToString();
                    
                    hidVentana.Value = string.IsNullOrEmpty(htaDatos["in_ventana"].ToString()) ? string.Empty : htaDatos["in_ventana"].ToString();
                  
                }
                else
                {
                    Session["htaOCFac"] = null;
                    Hashtable HtaDatos = new Hashtable();
                    Session["_htaOcompraNuevo"] = HtaDatos;

                    HtaDatos = (Hashtable)Session["_htaOcompraNuevo"];
                }
            //}
            //catch (Exception ex)
            //{
            //    Response.Write(ex.ToString());
            //}
        }

        private void mCargarDatos()
        {
            try
            {
                if (!string.IsNullOrEmpty(hddIdOC.Value))
                {
                    EOrdenCompra oCompra = new EOrdenCompra();

                    oCompra.Id_periodo = Session[ConstSessionVar.PERIODO].ToString(); //llenar con sesion
                    oCompra.Id_ordenco = string.IsNullOrEmpty(hddIdOC.Value) ? string.Empty : Convert.ToString(hddIdOC.Value);
                    oCompra.idEmpresa = Session[ConstSessionVar.EMPRESA].ToString();

                    EOrdenCompra oBtieneOC = new EOrdenCompra();
                    oBtieneOC = BOrdenCompra.mObtenerOC(oCompra);
                    txtIdOC.Text = oBtieneOC.Id_ordenco.ToString().Trim();
                    ucControlFecha1.Text = oBtieneOC.Fe_ordenco.ToString().Trim();

                    HddIdprov.Value = oBtieneOC.Id_clipro.ToString().Trim();
                    txtIdprov.Text = oBtieneOC.clipro.ToString().Trim();

                    HiddPedidoPor.Value = oBtieneOC.Id_personal.ToString().Trim();
                    lblEmitidoPor.Text = oBtieneOC.Emitidap.ToString().Trim();
                    HddIdEmitidopor.Value = oBtieneOC.Id_personal2.ToString().Trim();
                    txtObseracion.Text = oBtieneOC.Ds_observa.ToString().Trim();
                    dpModalidad.SelectedValue = oBtieneOC.Id_modcomp.ToString().Trim();
                    dpNoneda.SelectedValue = oBtieneOC.Id_vmoneda.ToString().Trim();

                    txtTipCambio.Text = oBtieneOC.Mt_tc.ToString().Trim();

                    List<EDetProducto> lstoc = new List<EDetProducto>();

                    lstoc = BDetOrdenCompra.mListarOcompraFac(oCompra);

                    Session["_seslstListaDetOC"] = lstoc;

                    GVDetalleProducto.DataSource = lstoc;

                    GVDetalleProducto.DataBind();

                    for (int r = 0; GVDetalleProducto.Rows.Count > r; r++)
                    {
                        var chk = ((CheckBox)GVDetalleProducto.Rows[r].FindControl("chkBxIGV")) as CheckBox;

                        var igv = (TextBox)GVDetalleProducto.Rows[r].FindControl("txtIGV");

                        if ((igv.Text == "0.0000")|| (igv.Text=="0"))
                        {
                            chk.Checked = false;
                        }
                        else
                        {
                            chk.Checked = true;
                        }
                    }
                    getCalculo();

                }
            }
            catch (Exception ex)
            {
                ex.ToString();
            }
        }

        protected void GVDetalleProducto_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            //decimal cant = 0;
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                //llena la columna de la grila tipo dropdownlist con los tipos de horario.

                DropDownList cbGrillaUN = (DropDownList)e.Row.FindControl("dpUM");
                CheckBox chkIgv = (CheckBox)e.Row.FindControl("chkBxIGV");

                WebHelper.LoadListControl2(cbGrillaUN, BTablaGeneral.TablaGeneral_qry02("020"), "ds_item", "id_item");

                AddCallbackControl(cbGrillaUN);

                cbGrillaUN.Items.Insert(0, new ListItem("Seleccione", "0"));

                chkIgv.Checked = (Boolean)DataBinder.Eval(e.Row.DataItem, "_igvActivo");
                cbGrillaUN.SelectedValue = (String)DataBinder.Eval(e.Row.DataItem, "Id_vunicons").ToString();

            }

        }

        protected void btnSalir_Click(object sender, ImageClickEventArgs e)
        {
            this.Response.Redirect("wfOrdenCompraBnd.aspx");
        }

        protected void GVDetalleProducto_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            PageBase ri = new PageBase();
            ri.EditRowIndex = Convert.ToInt32(e.CommandArgument);

            try
            {
                switch (e.CommandName)
                {

                    case Constants2.ConstGridRowCommand.GRIDCALC:

                        getCalculo();
                        break;

                    case Constants2.ConstGridRowCommand.GRIDDELETE:

                        GVDetalleProducto.DeleteRow(Convert.ToInt32(e.CommandArgument));
                        GVDetalleProducto.DataBind();
                        break;

                }
            }
            catch (Exception EX)
            {
                Response.Write(EX.ToString());
            }
            

        }


        protected void GVDetalleProducto_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            try
            {
                mSalvarDatosGrilla();
                int intFila = e.RowIndex;
                List<EDetProducto> lsListadoActual = (List<EDetProducto>)Session["SeslstSalvaDatosFac"];
                lsListadoActual.RemoveAt(intFila);
                Session["SeslstSalvaDatosFac"] = lsListadoActual;
                GVDetalleProducto.DataSource = lsListadoActual;
                GVDetalleProducto.DataBind();
            }
            catch (Exception ex)
            {
                Response.Write(ex.ToString());

            }
        }

        private void verificarCell()
        {
            lblEvaluacion.Text = "";

            for (int i = 0; GVDetalleProducto.Rows.Count > i; i++)
            {

                TextBox idProducto = (TextBox)GVDetalleProducto.Rows[i].FindControl("txtDsProducto");
                TextBox cantPed = (TextBox)GVDetalleProducto.Rows[i].FindControl("txtCantidad");
                TextBox cantRec = (TextBox)GVDetalleProducto.Rows[i].FindControl("txtCantidadRec");
                TextBox cantReg = (TextBox)GVDetalleProducto.Rows[i].FindControl("txtcantReg");

                decimal cantGen = Convert.ToDecimal(cantRec.Text) + Convert.ToDecimal(cantReg.Text);

                if (Convert.ToDecimal(cantPed.Text) >= cantGen)
                {

                    lblMensaje.Text = "Correcto";
                }
                else
                {
                    lblEvaluacion.Text = lblEvaluacion.Text + idProducto.Text + " " + "  Cant a Ing. es mayor: " + cantGen + " ";
                    lblMensaje.Text = "Incorrecto";
                }

            }
        }


        private void grabar()
        {
            try
            {
            EFactura fac = new EFactura();
            EDetFactura doc = new EDetFactura();
            EDetOrdenCompra ocd = new EDetOrdenCompra();
            DropDownList idOC = new DropDownList();

            if (txtIdDoc.Text == "")
            {
                WebHelper.LoadListControl2(idOC, BFactura.Factura_qry01(Session[ConstSessionVar.PERIODO].ToString(), Session[ConstSessionVar.EMPRESA].ToString()), "idfactura", "idfactura");
                txtIdDoc.Text= idOC.SelectedItem.Text;
                fac.Id_factura = txtIdDoc.Text;
                doc.Id_factura = txtIdDoc.Text;
                LBLIDDOC.Text = txtIdOC.Text;

            }
            else
            {
                fac.Id_factura = txtIdDoc.Text;
                doc.Id_factura = txtIdDoc.Text;

            }
            fac.Id_periodo = Session[ConstSessionVar.PERIODO].ToString();//llenar con sesion
            fac.Id_serie = txtNumSerie.Text;
            fac.Id_ordenco = txtIdOC.Text;
            fac.Fe_factura = ucControlFecha2.Text;
            fac.Id_docucom = dpTipDoc.SelectedValue;
            fac.Nu_docu = txtNumDoc.Text;

            fac.Id_clipro = HddIdprov.Value;

            fac.Id_personal = HddIdEmitidopor.Value;// llenar con sesion
            fac.Ds_observa = txtObseracion.Text.ToUpper();
            fac.Id_vmoneda = dpNoneda.SelectedValue;
            fac.Mt_total = Convert.ToDecimal(txtTotal_.Text);
            fac.Mt_tc = Convert.ToDecimal(txtTipCambio.Text);
            fac.Id_modcomp = dpModalidad.SelectedValue;
            fac.Id_ucrearec = Session[ConstSessionVar.IDLOGON].ToString();//LLENAR DESDE LA SESION
            fac.Id_uupdarec = Session[ConstSessionVar.IDLOGON].ToString();//LLENAR DESDE LA SESION
            fac.St_factura = "0";
            fac.St_anulado = "0";
            fac.Id_empresa = Session[ConstSessionVar.EMPRESA].ToString(); //LLENAR DESDE LA SESION
            BFactura.Factura_mnt01(fac);
            for (int i = 0; GVDetalleProducto.Rows.Count > i; i++)
            {
                //prodxUnd.Id_producto = txtidProducto.Text;
                var LblIdproducto = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIdproducto")).Text.Trim();
                var LblIdPres = ((DropDownList)GVDetalleProducto.Rows[i].FindControl("dpUM")).Text.Trim();
                var LblDsProducto = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDsProducto")).Text.Trim();
                var LblNum_Correla = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtNumCorrelativo")).Text.Trim();
                var LblPesoBruto = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPesoBruto")).Text.Trim();
                var LblCantidad = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtcantReg")).Text.Trim();
                var LblCantidadDef = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtCantidadRec")).Text.Trim();
                var LblCantidadreg = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtcantReg")).Text.Trim();

                var LblPneto = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPneto")).Text.Trim();
                var LblPU = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPU")).Text.Trim();
                var LblprodDscto = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPorDesc")).Text.Trim();
                var LblDscto = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDscto")).Text.Trim();
                var LblIGV = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIGV")).Text.Trim();
                var LblSubTotal = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtSubTotal")).Text.Trim();
                var LblDetalle = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDetalle")).Text.Trim();
                var lbltot = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtcantReg")).Text.Trim() + ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtCantidadRec")).Text.Trim();

                //------------------------Detalle de Factura----------------------------------------------------

                doc.Id_periodo = Session[ConstSessionVar.PERIODO].ToString();//llenar con sesion
                
                doc.Nu_correla = LblNum_Correla;
                doc.Id_serie = txtNumSerie.Text;
                doc.Id_producto = LblIdproducto;
                doc.Id_prodprese = LblIdPres;
                doc.Qt_producto = Convert.ToDecimal(LblCantidad);

                doc.Id_vmoneda = dpNoneda.SelectedValue;
                doc.Qt_pesobruto = Convert.ToDecimal(LblPesoBruto);
                doc.Qt_pesoneto = Convert.ToDecimal(LblPneto);
                doc.Mt_precuni = Convert.ToDecimal(LblPU);
                doc.Mt_igv = Convert.ToDecimal(LblIGV);
                doc.Mt_subtotal = Convert.ToDecimal(LblSubTotal);
                doc.Mt_dscto = Convert.ToDecimal(LblDscto);
                doc.Id_ucrearec = Session[ConstSessionVar.IDLOGON].ToString(); //llenar con sesion
                doc.Id_uupdarec = Session[ConstSessionVar.IDLOGON].ToString(); //llenar con sesion
                doc.St_anulado = "0";
                doc.Id_empresa = Session[ConstSessionVar.EMPRESA].ToString(); //llenar con sesion
                doc.detalle = LblDetalle.ToUpper();

                BDetFactura.DetFactura_mnt01(doc);

                ocd.Id_periodo = Session[ConstSessionVar.PERIODO].ToString(); //llenar con sesion
                ocd.idEmpresa = Session[ConstSessionVar.EMPRESA].ToString(); //llenar con sesion
                ocd.Id_ordenco = txtIdOC.Text;
                ocd.Nu_correla = LblNum_Correla;
                ocd.Id_producto = LblIdproducto;
                ocd.Qt_difcierre = Convert.ToDecimal(LblCantidadDef) + Convert.ToDecimal(LblCantidad);
                BFactura.Factura_mnt02(ocd);
            }
            EOrdenCompra coc = new EOrdenCompra();
            coc.Id_periodo = Session[ConstSessionVar.PERIODO].ToString();// llenar con sesion
            coc.Id_ordenco = txtIdOC.Text;
            coc.Id_Empresa = Session[ConstSessionVar.EMPRESA].ToString(); //llenar con sesiosn
            coc.Id_uupdarec = Session[ConstSessionVar.IDLOGON].ToString(); // llenar con sesion

            BFactura.CierreCompra_mnt02(coc);


            lblMensaje.Text = "Datos grabados";

            }
            catch (Exception ex)
            {
                Response.Write(ex.ToString());

            }
            

        }


        protected void btnGrabar_Click(object sender, ImageClickEventArgs e)
        {
            EOrdenCompra oCompra = new EOrdenCompra();

            oCompra.Id_periodo = Session[ConstSessionVar.PERIODO].ToString(); //llenar con sesion
            oCompra.Id_ordenco = txtIdOC.Text;
            oCompra.idEmpresa = Session[ConstSessionVar.EMPRESA].ToString();

            EOrdenCompra oBtieneOC = new EOrdenCompra();
            oBtieneOC = BOrdenCompra.mObtenerOCEstado(oCompra);
            HiddEstado.Value = oBtieneOC.estadoOC.ToString().Trim();

            try
            { 
                if (txtIdDoc.Text == "")
                {
                    getCalculo();
                    verificarCell();
                    if (lblMensaje.Text == "Correcto")
                    {
                        grabar();
                    }
                }
                else
                {
                    if (HiddEstado.Value == "1")
                    {
                        getCalculo();
                        grabar();
                    }
                    else
                    {
                        lblMensaje.Text = "OC Aprobada, No puede Modificar";
                    }
                }
            }
            catch (Exception ex)
            {
                Response.Write(ex.ToString());
            }


        }

    }
}